home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / TEMP / GNU / bison / MultiplePa < prev    next >
Text File  |  1995-06-28  |  2KB  |  34 lines

  1. Multiple Parsers
  2. Previous: <Declarations=>Declaratio> * Next: <Interface=>Interface> * Up: <Grammar File=>GrammarFil>
  3.  
  4. #Wrap on
  5. {fH3}Multiple Parsers in the Same Program{f}
  6.  
  7. Most programs that use Bison parse only one language and therefore contain
  8. only one Bison parser.  But what if you want to parse more than one
  9. language with the same program?  Then you need to avoid a name conflict
  10. between different definitions of {fCode}yyparse{f}, {fCode}yylval{f}, and so on.
  11.  
  12. The easy way to do this is to use the option {fEmphasis}-p {fStrong}prefix{f}{f}
  13. (\*Note <Invocation=>Invocation>: Invoking Bison).  This renames the interface functions and
  14. variables of the Bison parser to start with {fStrong}prefix{f} instead of
  15. {fEmphasis}yy{f}.  You can use this to give each parser distinct names that do
  16. not conflict.
  17.  
  18. The precise list of symbols renamed is {fCode}yyparse{f}, {fCode}yylex{f},
  19. {fCode}yyerror{f}, {fCode}yynerrs{f}, {fCode}yylval{f}, {fCode}yychar{f} and
  20. {fCode}yydebug{f}.  For example, if you use {fEmphasis}-p c{f}, the names become
  21. {fCode}cparse{f}, {fCode}clex{f}, and so on.
  22.  
  23. {fStrong}All the other variables and macros associated with Bison are not
  24. renamed.{f} These others are not global; there is no conflict if the same
  25. name is used in different parsers.  For example, {fCode}YYSTYPE{f} is not
  26. renamed, but defining this in different ways in different parsers causes
  27. no trouble (\*Note <Value Type=>ValueType>: Data Types of Semantic Values).
  28.  
  29. The {fEmphasis}-p{f} option works by adding macro definitions to the beginning
  30. of the parser source file, defining {fCode}yyparse{f} as
  31. {fCode}{fStrong}prefix{f}parse{f}, and so on.  This effectively substitutes one
  32. name for the other in the entire parser file.
  33.  
  34.